package com.mycat.chat.two.handle.base;

import com.mycat.chat.two.handle.MessageLoginHandle;
import com.mycat.chat.two.handle.MessageRegisterHandle;
import com.mycat.chat.two.msg.MessageLogin;
import com.mycat.chat.two.msg.MessageRegister;
import com.mycat.chat.two.msg.base.Message;
import com.mycat.chat.two.msg.base.MessageType;
import com.mycat.chat.two.util.ChatException;
import com.mycat.chat.two.util.GsonUtil;

import java.util.Map;

/**
 * 消息处理器实例化
 *
 * @author roger.
 * @email 190642964@qq.com
 * @create 2017-02-24
 */
public class MessageHandleInstance {

    /**
     * JSON字符串中消息类型的key
     */
    public static final String MESSAGE_TYPE_KEY = "messageType";

    /**
     * 根据JSON字符串获取其实际消息处理器
     *
     * @param message JSON格式字符串
     * @return MessageHandle
     */
    public static MessageHandle newInstance(String message) {

        // 将JSON字符串转换为Map
        Map<String, Object> msgMap = GsonUtil.toMap(message);

        String messageType = String.valueOf(msgMap.get(MESSAGE_TYPE_KEY));
        if (null == messageType || "".equals(messageType.trim())) {
            throw new ChatException("当前message字符串中没有消息类型字符[" + MESSAGE_TYPE_KEY + "]....");
        }
        MessageHandle messageHandle = null;

        if (MessageType.LOGIN_MSG.getType().equals(messageType)) {
            messageHandle = new MessageLoginHandle(GsonUtil.parseJson(message,MessageLogin.class));
        }else if(MessageType.REGISTER_MSG.getType().equals(messageType)){
            messageHandle = new MessageRegisterHandle(GsonUtil.parseJson(message,MessageRegister.class));
        }else if(MessageType.EXIT_MSG.getType().equals(messageType)){

        }else if(MessageType.GENERAL_MSG.getType().equals(messageType)){

        }else if(MessageType.SHAKE_MSG.getType().equals(messageType)){

        }

        msgMap.clear();
        return messageHandle;
    }

}
